8.4 更强的列方向转到行方向(分层索引)
如果DataFrame表格的列是分层索引,如果要指定列索引转换到行方向,需要用元组的方式,也可以用col_level来指定要转换的索引层级,不过要保持列索引的标签数据的唯一性。
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.04 更强的列方向转到行方向(分层索引).xlsx" , header =[ 0,1 ])
#导入时不需指定索引
print (df)
t=df.melt(
id_vars=[( "信息","姓名" ),( "信息","籍贯" )],
value_vars=[( "2018年","上半年" )],
var_name=[ "年份","上下半年" ],
value_name = "分数"
).rename(columns={( "信息","姓名" ): "姓名" ,( "信息","籍贯" ): "籍贯" })
print (t)
返回:
信息 | 2018年 | 2019年 | ||||
---|---|---|---|---|---|---|
姓名 | 籍贯 | 上半年 | 下半年 | 上半年 | 下半年 | |
0 | 张三 | 湖南 | 101 | 121 | 150 | 152 |
1 | 李四 | 江西 | 140 | 147 | 162 | 165 |
2 | 王麻子 | 湖北 | 106 | 168 | 118 | 123 |
姓名 | 籍贯 | 年份 | 上下半年 | 分数 | |
---|---|---|---|---|---|
0 | 张三 | 湖南 | 2018年 | 上半年 | 101 |
1 | 李四 | 江西 | 2018年 | 上半年 | 140 |
2 | 王麻子 | 湖北 | 2018年 | 上半年 | 106 |
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.04 更强的列方向转到行方向(分层索引).xlsx", 1 , header =[ 0,1 ])
#导入时不需指定索引
print (df)
t=df.melt(
col_level=1,
id_vars=[ "姓名","籍贯" ],
value_vars=[ "18上半年","19上半年" ],
var_name =[ "年份" ],
value_name = "分数"
)
print (t)
返回:
信息 | 2018年 | 2019年 | ||||
---|---|---|---|---|---|---|
姓名 | 籍贯 | 18上半年 | 18下半年 | 19上半年 | 19下半年 | |
0 | 张三 | 湖南 | 188 | 155 | 123 | 153 |
1 | 李四 | 江西 | 175 | 198 | 181 | 106 |
2 | 王麻子 | 湖北 | 153 | 118 | 133 | 135 |
姓名 | 籍贯 | 年份 | 分数 | |
---|---|---|---|---|
0 | 张三 | 湖南 | 18上半年 | 188 |
1 | 李四 | 江西 | 18上半年 | 175 |
2 | 王麻子 | 湖北 | 18上半年 | 153 |
3 | 张三 | 湖南 | 19上半年 | 123 |
4 | 李四 | 江西 | 19上半年 | 181 |
5 | 王麻子 | 湖北 | 19上半年 | 133 |